package com.sky.config;

import com.sky.properties.AliOssProperties;
import com.sky.utils.AliOssUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 配置类，用于创建AliOssUtil对象
 */
@Configuration
@Slf4j
public class OssConfiguration {

    @Bean
    @ConditionalOnMissingBean
    //确保只有在Spring容器中不存在相同类型的bean时才创建此bean。
    public AliOssUtil aliOssUtil(AliOssProperties aliOssProperties) {
        log.info("开始创建阿里云文件上传工具类对象：{}", aliOssProperties);
        return new AliOssUtil(aliOssProperties.getEndpoint(),
                aliOssProperties.getAccessKeyId(),
                aliOssProperties.getAccessKeySecret(),
                aliOssProperties.getBucketName());
    }
    /*
AliOssUtil Bean对象的生命周期流程如下：
Spring容器启动：读取配置文件并加载配置类。
配置类加载：解析OssConfiguration类。
属性注入：解析并注入AliOssProperties。
创建Bean对象：调用aliOssUtil方法创建AliOssUtil实例。
注册Bean到容器：将AliOssUtil实例注册为单例Bean。
条件判断：确保不重复创建同类型Bean。
使用Bean：在其他组件中通过依赖注入使用AliOssUtil。
这种方式不仅简化了Bean的创建和管理，还确保了配置的一致性和灵活性*/
}
